---
title: "Swift 入門指南"
description: "從 JavaScript 開發者視角理解 Swift 生態系統，掌握類型安全、可選類型和 iOS 開發等核心概念。"
---

## 1. 介紹

### 為什麼 JavaScript 開發者應該學習 Swift？

作為 JavaScript 開發者，你可能已經在 Web 開發方面很熟練，但 Swift 為移動和桌面應用開發打開了令人興奮的機會。以下是學習 Swift 的 compelling 理由：

- **iOS/macOS 開發**：為 Apple 生態系統創建原生應用
- **類型安全**：體驗編譯時安全，防止運行時錯誤
- **現代編程**：學習協議導向編程和函數式特性
- **性能**：構建具有內存安全性的高性能應用
- **職業發展**：擴展技能到移動開發領域

> 最重要的是：Swift 是 Apple 平台開發的未來！

## 2. Swift 語言基礎

### 2.1 Swift 介紹

Swift 是 Apple 在 2014 年創建的現代編程語言，設計目標是安全、快速和表達性強。它結合了多種編程範式的最佳特性。

**Swift 設計哲學**
```swift
// Swift 強調安全性、清晰性和性能
// 核心原則：
// - 類型安全防止許多常見的編程錯誤
// - 使用 ARC 的自動內存管理
// - 現代語法，易於讀寫
// - 與 Objective-C 和 C 的互操作性
```

**與 JavaScript 的核心對比**

| 特性 | JavaScript | Swift | 描述 |
|---|---|---|---|
| **類型系統** | 動態類型 | 靜態類型 | Swift 提供編譯時類型檢查。 |
| **內存管理** | 垃圾回收 | 自動引用計數 (ARC) | Swift 使用 ARC 進行自動內存管理。 |
| **空值安全** | `null`/`undefined` | 可選類型 | Swift 的可選類型使空值處理顯式且安全。 |
| **語法風格** | C 風格 | 現代、簡潔 | Swift 具有更現代和可讀的語法。 |
| **變量聲明** | `let/const/var` | `let/var` | Swift 使用 `let` 表示常量，`var` 表示變量。 |
| **字符串** | 模板字面量 | 字符串插值 | Swift 使用 `\()` 進行字符串插值。 |
| **註釋** | `//` 或 `/* */` | `//` 或 `/* */` | 兩者都支持相似的註釋風格。 |

**代碼風格對比示例**

```javascript
// JavaScript 風格
function calculateArea(width, height) {
    const area = width * height;
    return area;
}

const result = calculateArea(10, 5);
console.log(`面積是: ${result}`);
```

```swift
// Swift 風格
func calculateArea(width: Double, height: Double) -> Double {
    let area = width * height
    return area
}

let result = calculateArea(width: 10, height: 5)
print("面積是: \(result)")
```

### 2.2 Swift 安裝和配置

**安裝方法對比**

| 操作系統 | JavaScript (Node.js) | Swift | 描述 |
|---|---|---|---|
| **Windows** | 從官網下載安裝程序 | 從 swift.org 下載 | Swift 有官方 Windows 支持。 |
| **macOS** | Homebrew: `brew install node` | Xcode 或 Swift 工具鏈 | Xcode 是推薦的 Swift IDE。 |
| **Linux** | 包管理器或源碼編譯 | 包管理器或源碼編譯 | Swift 有官方 Linux 支持。 |

**驗證安裝**

```bash
# JavaScript 環境驗證
node --version
npm --version

# Swift 環境驗證
swift --version
swiftc --version
```

**開發環境設置**

| 工具 | JavaScript | Swift | 用途 |
|---|---|---|---|
| **IDE** | VS Code, WebStorm | Xcode, VS Code | 主要開發環境 |
| **包管理器** | npm, yarn | Swift Package Manager (SPM) | 依賴管理 |
| **構建工具** | Webpack, Vite | Swift Package Manager | 項目構建和編譯 |
| **調試器** | Chrome DevTools | Xcode Debugger, LLDB | 代碼調試 |

## 3. Swift 開發生態系統

### 3.1 Swift Package Manager (SPM)

Swift Package Manager 是 Swift 的官方包管理器，類似於 JavaScript 生態系統中的 `npm`。

**核心命令對比**

| 功能 | npm/yarn | Swift Package Manager | 描述 |
|---|---|---|---|
| **初始化項目** | `npm init` | `swift package init` | 創建新的 Swift 包 |
| **添加依賴** | `npm install package` | 添加到 Package.swift | 依賴在 Package.swift 中聲明 |
| **構建項目** | `npm run build` | `swift build` | 編譯 Swift 項目 |
| **運行項目** | `npm start` | `swift run` | 執行 Swift 應用 |
| **測試項目** | `npm test` | `swift test` | 運行單元測試 |
| **更新依賴** | `npm update` | `swift package update` | 更新包依賴 |

**依賴文件對比**

```json
// package.json (JavaScript)
{
  "name": "my-project",
  "version": "1.0.0",
  "dependencies": {
    "express": "^4.18.2",
    "axios": "^1.6.0"
  },
  "devDependencies": {
    "jest": "^29.7.0",
    "eslint": "^8.55.0"
  },
  "scripts": {
    "start": "node index.js",
    "test": "jest"
  }
}
```

```swift
// Package.swift (Swift)
// swift-tools-version: 5.9
import PackageDescription

let package = Package(
    name: "MyProject",
    version: "1.0.0",
    dependencies: [
        .package(url: "https://github.com/vapor/vapor.git", from: "4.0.0"),
        .package(url: "https://github.com/Alamofire/Alamofire.git", from: "5.0.0")
    ],
    targets: [
        .target(
            name: "MyProject",
            dependencies: ["Vapor", "Alamofire"]
        ),
        .testTarget(
            name: "MyProjectTests",
            dependencies: ["MyProject"]
        )
    ]
)
```

### 3.2 Xcode - Swift IDE

Xcode 是 Apple 的 Swift 開發集成開發環境，提供全面的工具集。

**Xcode Swift 開發功能**

| 功能 | 描述 | JavaScript 等效工具 |
|---|---|---|
| **代碼編輯器** | 語法高亮、自動完成 | VS Code, WebStorm |
| **界面構建器** | 可視化 UI 設計 | React DevTools, Storybook |
| **調試器** | LLDB 集成 | Chrome DevTools |
| **模擬器** | iOS/macOS 應用測試 | 瀏覽器測試 |
| **資源管理** | 圖像和資源管理 | Webpack 資源處理 |
| **版本控制** | Git 集成 | 任何編輯器中的 Git 集成 |

**Xcode 項目結構**

```
MyApp/
├── MyApp.xcodeproj/          # 項目文件
├── MyApp/                    # 源代碼
│   ├── App.swift            # 應用入口點
│   ├── ContentView.swift    # 主視圖
│   └── Assets.xcassets/     # 圖像和資源
├── MyAppTests/              # 單元測試
└── MyAppUITests/            # UI 測試
```

## 4. 你的第一個 Swift 程序

### 4.1 Hello World 對比

<UniversalEditor title="Hello World 對比" compare={true}>
```javascript !! js
// JavaScript Hello World
console.log("Hello, World!");

// 函數示例
function greet(name) {
    return `Hello, ${name}!`;
}

console.log(greet("Swift"));
```

```swift !! swift
// Swift Hello World
print("Hello, World!")

// 函數示例
func greet(name: String) -> String {
    return "Hello, \(name)!"
}

print(greet(name: "Swift"))
```
</UniversalEditor>

### 4.2 基礎 Swift 概念

**變量和常量**

<UniversalEditor title="變量和常量" compare={true}>
```javascript !! js
// JavaScript 變量
let name = "John";           // 塊作用域變量
const age = 25;              // 常量
var oldWay = "deprecated";   // 函數作用域變量

console.log(name, age);
```

```swift !! swift
// Swift 變量
let name = "John"            // 常量（不可變）
var age = 25                 // 變量（可變）
let pi: Double = 3.14159     // 顯式類型註解

print(name, age)
```
</UniversalEditor>

**類型安全示例**

<UniversalEditor title="類型安全對比" compare={true}>
```javascript !! js
// JavaScript - 動態類型
let value = 42;
value = "Hello";  // 無錯誤 - 類型可以改變
value = true;     // 無錯誤 - 類型可以改變

console.log(value + 10);  // 運行時錯誤: "Hello10"
```

```swift !! swift
// Swift - 靜態類型
var value: Int = 42
// value = "Hello"  // 編譯時錯誤！
// value = true     // 編譯時錯誤！

print(value + 10)  // 正確工作: 52
```
</UniversalEditor>

## 5. Swift 語言特性概覽

### 5.1 關鍵 Swift 特性

**可選類型 - Swift 的空值安全**

<UniversalEditor title="可選類型" compare={true}>
```javascript !! js
// JavaScript - null/undefined 處理
function getUserName(user) {
    if (user && user.name) {
        return user.name;
    }
    return "Unknown";
}

const user = { name: "John" };
console.log(getUserName(user));
console.log(getUserName(null));
```

```swift !! swift
// Swift - 可選類型
func getUserName(user: User?) -> String {
    if let name = user?.name {
        return name
    }
    return "Unknown"
}

let user = User(name: "John")
print(getUserName(user: user))
print(getUserName(user: nil))
```
</UniversalEditor>

**協議導向編程**

<UniversalEditor title="協議 vs 接口" compare={true}>
```javascript !! js
// JavaScript - 鴨子類型
function makeSound(animal) {
    return animal.sound();
}

const dog = {
    sound: () => "Woof!"
};

console.log(makeSound(dog));
```

```swift !! swift
// Swift - 協議
protocol Animal {
    func sound() -> String
}

struct Dog: Animal {
    func sound() -> String {
        return "Woof!"
    }
}

func makeSound(animal: Animal) -> String {
    return animal.sound()
}

let dog = Dog()
print(makeSound(animal: dog))
```
</UniversalEditor>

## 6. 開發工作流

### 6.1 Swift 開發流程

**典型的 Swift 開發工作流**

1. **項目設置**：創建新的 Xcode 項目或 Swift 包
2. **代碼編寫**：使用 Xcode 編輯器，具有自動完成和語法檢查
3. **編譯**：Swift 編譯器在編譯時檢查類型和語法
4. **測試**：運行單元測試和 UI 測試
5. **調試**：使用 Xcode 調試器和模擬器
6. **部署**：為設備或 App Store 構建

**與 JavaScript 工作流對比**

| 步驟 | JavaScript | Swift |
|---|---|---|---|
| **開發** | VS Code + 瀏覽器 | Xcode + 模擬器 |
| **類型檢查** | TypeScript（可選） | 內置（必需） |
| **測試** | Jest, Mocha | XCTest 框架 |
| **調試** | Chrome DevTools | Xcode 調試器 |
| **部署** | Web 服務器 | App Store/設備 |

### 6.2 Swift Package Manager 工作流

```bash
# 創建新的 Swift 包
swift package init --type executable

# 在 Package.swift 中添加依賴
# 構建項目
swift build

# 運行應用
swift run

# 運行測試
swift test
```

## 7. 下一步

### 7.1 學習路徑

1. **模塊 01**：語法對比和基礎概念
2. **模塊 02**：類型系統和可選類型
3. **模塊 03**：函數和閉包
4. **模塊 04**：集合和數據結構
5. **模塊 05**：控制流和錯誤處理

### 7.2 練習

1. 創建簡單的 Swift 命令行應用
2. 設置 Xcode 項目
3. 編寫帶類型註解的基礎函數
4. 實驗可選類型和解包
5. 創建簡單協議並實現它

### 7.3 資源

- **官方文檔**：[Swift.org](https://swift.org)
- **Xcode 文檔**：內置到 Xcode 中
- **Swift Playgrounds**：交互式學習環境
- **Apple 開發者**：[developer.apple.com](https://developer.apple.com)

## 總結

Swift 為 JavaScript 開發者提供了構建原生應用的強大、類型安全的替代方案。關鍵要點：

- **類型安全**：編譯時檢查防止運行時錯誤
- **現代語法**：具有現代特性的清晰、可讀代碼
- **Apple 生態系統**：訪問 iOS、macOS、watchOS 和 tvOS 開發
- **性能**：具有自動內存管理的高性能應用
- **互操作性**：與 Objective-C 和 C 無縫協作

接下來的模塊將深入探討 Swift 的語法、類型系統和高級特性，始終與你已經知道的 JavaScript 概念進行對比。 